【PIC24FJ64GA002】I2C低電圧キャラクタ液晶モジュールを使ってみる。(ストロベリーリナックスのLCD)

2021年2月21日

■ストロベリーリナックスのI2CLCDをPIC24FJ64GA002で動かしてみました。

I2C低電圧キャラクタ液晶SB1602

I2Cのハードウエア制御の設定

データシートのpage146を参照に・・・
I2C1CONの15ビット目のI2CENを’1’にするとI2CがENABLEになります。
I2C1CONbits.I2CEN = 1;
I2C1STATはステータスレジスタです。

ボーレートの設定

データシートのpage145のEQUATION15-1を参照に・・・
I2CxBRG={FCY/FSCL-FCY/107}-1
FOSC=32MHzで設定したとすると・・・
⇒FCY=FOSC/2=16MHzとなります。
FSCL=100kHzで使いたいとすると・・・
⇒I2C1BRG = 157.4 四捨五入して↓
⇒⇒I2C1BRG = 157;
データシートのpage145-TABLE15-1の値と同じになりました。

LCDの初期化

LCDコントローラ【ST7032i】のデータシートpage34を参照に・・・
コントラストとFollowerを少しいじりました。
コントラストは上位2bit(C5、C4)だけPower/ICONと同じ場所です。

レジスタDB7DB6DB5DB4DB3DB2DB1DB0設定値
ContrastSET0111C3C2C1C001111111
Power/Contrast0101IONBONC5C401011111
FollowerControl0110FONR2R1R001101010

(ド嵌りしましたが)LCDのアドレスは7bitで’0111110’と書かれているので
⇒’3E’としてしまいそうになりますが、
さらにLSB「write=0」を付け加える必要があるので⇒’01111100’⇒’7C’です。

ソース

Microchip_PIC24F_Peripheral_Library.chmを参照にすればプログラムは構築出来ます。
でもi2c.hを使うとすべて「xxx();」で出来てしまうので↑資料(英文)を読みながら自分なりにトライしました。
■「StartI2C1();」⇒「I2C1CONbits.SEN = 1;」
■「IdleI2C1();」⇒I2C1CONのStartConditionEnableBIT=SEN、StopCondetionEnableBIT=PEN、ReceiveEnableBIT=RCEN、AcknowledgeSequenceEnable=ACKEN、I2C1STATのTransmitStatusBIT=TRSTAT、計5bitのクリア待ちなようです。
while(I2C1CONbits.SEN || I2C1CONbits.PEN || I2C1CONbits.RCEN || I2C1CONbits.ACKEN || I2C1STATbits.TRSTAT);
■「StopI2C1();」⇒「I2C1CONbits.PEN = 1;」

回路図

fce82c00.jpg

よろしければバナーをクリックお願いします!